# retrying模块的使用: 刷新请求(相当于我们再浏览器刷新页面)
"""
1.安装:pip install retrying

2.retrying 模块的使用:
    ①用retrying模块提供的retry模块
    ②通过装饰器的方式使用，让被装饰的函数反复执行
    ③retry中可以传入参数stop_max_attempt_number,
    让函数报错后继续重新执行,达到最大执行次数的上限,如果每次都报错,
    整个函数报错,如果中间有一个成功,程序继续往后执行
"""
# 3.retrying和requests的简单封装
# 实现一个发送请求的函数,每次爬虫中直接调用该函数即可实现发送请求,在其中
# ①使用timeout实现超时报错
# ②使用retrying模块实现重试
import requests
from retrying import retry


# 最大重试3次,3次全部报错,才会报错
@retry(stop_max_attempt_number=3)
def send_request(url):
    """
    发送请求,获取响应的方法
    :param url: 要请求的url地址
    :return: 响应内容
    """
    # 超时的时候会报错并重试
    response = requests.get(url, timeout=3)
    # 断言:状态码不是200,也会报错并重试
    assert response.status_code == 200
    return response


url = "https://twitter.com"

# 进行异常捕获
try:
    response = send_request(url)
except Exception as e:
    print(e)
    # 报错返回None
    response = None

if response:
    print("请求成功了")

# import requests
# from retrying import retry
#
# headers = {}
#
#
# # 最大重试3次，3次全部报错，才会报错
# @retry(stop_max_attempt_number=3)
# def _parse_url(url):
#     # 超时的时候回报错并重试
#     response = requests.get(url, headers=headers, timeout=3)
#     # 状态码不是200，也会报错并重试
#     assert response.status_code == 200
#     return response
#
#
# def parse_url(url):
#     try:  # 进行异常捕获
#         response = _parse_url(url)
#     except Exception as e:
#         print(e)
#         # 报错返回None
#         response = None
#     return response
